{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0-alpha0\n",
      "2.2.4-tf\n"
     ]
    }
   ],
   "source": [
    "# 导入\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras import layers\n",
    "\n",
    "print(tf.__version__)\n",
    "print(tf.keras.__version__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 784)   (60000,)\n",
      "(10000, 784)   (10000,)\n",
      "uint8\n"
     ]
    }
   ],
   "source": [
    "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()\n",
    "x_train = x_train.reshape([x_train.shape[0], -1])\n",
    "x_test = x_test.reshape([x_test.shape[0], -1])\n",
    "print(x_train.shape, ' ', y_train.shape)\n",
    "print(x_test.shape, ' ', y_test.shape)\n",
    "print(x_train.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建一个简单的神经网络\n",
    "# model = tf.keras.Sequential()\n",
    "# model.add(layers.Dense(64,activation='relu',input_shape=(784,)))\n",
    "# model.add(layers.Dense(32,activation='relu',kernel_initializer=tf.keras.initializers.glorot_normal))\n",
    "# model.add(layers.Dense(32,activation='relu',kernel_regularizer=tf.keras.regularizers.l2(0.01)))\n",
    "# model.add(layers.Dense(10,activation='softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# \n",
    "model = tf.keras.Sequential([\n",
    "    layers.Dense(64, activation='relu', kernel_initializer='he_normal', input_shape=(784,)),\n",
    "    layers.Dense(64, activation='relu', kernel_initializer='he_normal'),\n",
    "    layers.Dense(64, activation='relu', kernel_initializer='he_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01)),\n",
    "    layers.Dense(10, activation='softmax')\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_4\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_16 (Dense)             (None, 64)                50240     \n",
      "_________________________________________________________________\n",
      "dense_17 (Dense)             (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "dense_18 (Dense)             (None, 64)                4160      \n",
      "_________________________________________________________________\n",
      "dense_19 (Dense)             (None, 10)                650       \n",
      "=================================================================\n",
      "Total params: 59,210\n",
      "Trainable params: 59,210\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# 如果你的 targets 是 one-hot 编码，用 categorical_crossentropy\n",
    "# 如果你的 tagets 是 数字编码 ，用 sparse_categorical_crossentropy\n",
    "model.compile(optimizer=tf.keras.optimizers.Adam(),\n",
    "              loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n",
    "              metrics=['accuracy'])\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "history = model.fit(x_train, y_train, batch_size=256, epochs=100, validation_split=0.3, verbose=0)\n",
    "import matplotlib.pyplot as plt\n",
    "plt.plot(history.history['accuracy'])\n",
    "plt.plot(history.history['val_accuracy'])\n",
    "plt.legend(['training', 'validation'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'validation_data': None,\n",
       " 'model': <tensorflow.python.keras.engine.sequential.Sequential at 0x1340c4828>,\n",
       " '_chief_worker_only': None,\n",
       " 'params': {'batch_size': 256,\n",
       "  'epochs': 100,\n",
       "  'steps': None,\n",
       "  'samples': 42000,\n",
       "  'verbose': 0,\n",
       "  'do_validation': True,\n",
       "  'metrics': ['loss', 'accuracy', 'val_loss', 'val_accuracy']},\n",
       " 'epoch': [0,\n",
       "  1,\n",
       "  2,\n",
       "  3,\n",
       "  4,\n",
       "  5,\n",
       "  6,\n",
       "  7,\n",
       "  8,\n",
       "  9,\n",
       "  10,\n",
       "  11,\n",
       "  12,\n",
       "  13,\n",
       "  14,\n",
       "  15,\n",
       "  16,\n",
       "  17,\n",
       "  18,\n",
       "  19,\n",
       "  20,\n",
       "  21,\n",
       "  22,\n",
       "  23,\n",
       "  24,\n",
       "  25,\n",
       "  26,\n",
       "  27,\n",
       "  28,\n",
       "  29,\n",
       "  30,\n",
       "  31,\n",
       "  32,\n",
       "  33,\n",
       "  34,\n",
       "  35,\n",
       "  36,\n",
       "  37,\n",
       "  38,\n",
       "  39,\n",
       "  40,\n",
       "  41,\n",
       "  42,\n",
       "  43,\n",
       "  44,\n",
       "  45,\n",
       "  46,\n",
       "  47,\n",
       "  48,\n",
       "  49,\n",
       "  50,\n",
       "  51,\n",
       "  52,\n",
       "  53,\n",
       "  54,\n",
       "  55,\n",
       "  56,\n",
       "  57,\n",
       "  58,\n",
       "  59,\n",
       "  60,\n",
       "  61,\n",
       "  62,\n",
       "  63,\n",
       "  64,\n",
       "  65,\n",
       "  66,\n",
       "  67,\n",
       "  68,\n",
       "  69,\n",
       "  70,\n",
       "  71,\n",
       "  72,\n",
       "  73,\n",
       "  74,\n",
       "  75,\n",
       "  76,\n",
       "  77,\n",
       "  78,\n",
       "  79,\n",
       "  80,\n",
       "  81,\n",
       "  82,\n",
       "  83,\n",
       "  84,\n",
       "  85,\n",
       "  86,\n",
       "  87,\n",
       "  88,\n",
       "  89,\n",
       "  90,\n",
       "  91,\n",
       "  92,\n",
       "  93,\n",
       "  94,\n",
       "  95,\n",
       "  96,\n",
       "  97,\n",
       "  98,\n",
       "  99],\n",
       " 'history': {'loss': [7.9005795618693035,\n",
       "   2.124120216914586,\n",
       "   1.616187648546128,\n",
       "   1.339616301241375,\n",
       "   1.1333881379763284,\n",
       "   0.9915694637298584,\n",
       "   0.8736650619733901,\n",
       "   0.7712962197803316,\n",
       "   0.6929570614496867,\n",
       "   0.6213936801864988,\n",
       "   0.5651485111372812,\n",
       "   0.5001738905906677,\n",
       "   0.468985700402941,\n",
       "   0.4128129630429404,\n",
       "   0.37299513059570677,\n",
       "   0.33697362969602856,\n",
       "   0.3052270319688888,\n",
       "   0.2837851443177178,\n",
       "   0.25216443940003713,\n",
       "   0.22759134645689102,\n",
       "   0.21408943290937515,\n",
       "   0.20152270279044196,\n",
       "   0.1767050355275472,\n",
       "   0.1627472692444211,\n",
       "   0.15165194770835694,\n",
       "   0.13684639352843875,\n",
       "   0.1268712010043008,\n",
       "   0.13601035566840852,\n",
       "   0.10801906262125288,\n",
       "   0.10313411748693103,\n",
       "   0.09331807411284673,\n",
       "   0.09013604676439649,\n",
       "   0.0893290537255151,\n",
       "   0.08464817448598998,\n",
       "   0.07637603400434767,\n",
       "   0.0741742395446414,\n",
       "   0.07203964641974085,\n",
       "   0.07235134277741115,\n",
       "   0.08524643463180179,\n",
       "   0.06973124589380764,\n",
       "   0.054478169314918064,\n",
       "   0.053734363703500654,\n",
       "   0.05664297217343535,\n",
       "   0.05522407446588789,\n",
       "   0.059273397403103965,\n",
       "   0.07176827276036853,\n",
       "   0.050417060121184305,\n",
       "   0.04123333089124589,\n",
       "   0.03642794155223029,\n",
       "   0.03340248671670755,\n",
       "   0.03316684205475308,\n",
       "   0.03341214156683002,\n",
       "   0.04871445954839389,\n",
       "   0.0451350324600935,\n",
       "   0.0447983249972264,\n",
       "   0.03592625623018968,\n",
       "   0.030379380010777994,\n",
       "   0.02806772900195349,\n",
       "   0.02796754417674882,\n",
       "   0.0341031746825292,\n",
       "   0.032657593673183806,\n",
       "   0.03769080334617978,\n",
       "   0.04487726268385138,\n",
       "   0.026733390217026073,\n",
       "   0.02602180986780496,\n",
       "   0.024609446205908343,\n",
       "   0.026232677666204317,\n",
       "   0.020573686680978254,\n",
       "   0.025743007772735187,\n",
       "   0.028578571639600255,\n",
       "   0.027727243894267648,\n",
       "   0.027525891150392237,\n",
       "   0.028395523604892548,\n",
       "   0.02410162909896601,\n",
       "   0.02348726244057928,\n",
       "   0.026557615602300282,\n",
       "   0.02223110981321051,\n",
       "   0.01847196182927915,\n",
       "   0.01635142176208042,\n",
       "   0.022454837086654845,\n",
       "   0.03483418945826235,\n",
       "   0.025692940802801222,\n",
       "   0.045055955621813026,\n",
       "   0.024669359361486776,\n",
       "   0.017619708203134084,\n",
       "   0.017397708069710506,\n",
       "   0.022767602938271705,\n",
       "   0.015404495712901865,\n",
       "   0.013765652909874916,\n",
       "   0.009750295095677887,\n",
       "   0.008918758396059275,\n",
       "   0.015952910696466763,\n",
       "   0.02090994601412898,\n",
       "   0.032006769874621005,\n",
       "   0.01902789112127253,\n",
       "   0.013225336882684912,\n",
       "   0.008535622747881073,\n",
       "   0.007290581609698988,\n",
       "   0.006046781721214453,\n",
       "   0.0045983204646479515],\n",
       "  'accuracy': [0.69916666,\n",
       "   0.8369524,\n",
       "   0.8702143,\n",
       "   0.8925238,\n",
       "   0.90992856,\n",
       "   0.9210476,\n",
       "   0.9327143,\n",
       "   0.94035715,\n",
       "   0.9456428,\n",
       "   0.9503095,\n",
       "   0.9535952,\n",
       "   0.9606429,\n",
       "   0.95876193,\n",
       "   0.965,\n",
       "   0.96814287,\n",
       "   0.9702381,\n",
       "   0.97183335,\n",
       "   0.97242856,\n",
       "   0.97578573,\n",
       "   0.9778572,\n",
       "   0.97657144,\n",
       "   0.975619,\n",
       "   0.97978574,\n",
       "   0.9804762,\n",
       "   0.98090476,\n",
       "   0.9824762,\n",
       "   0.9823809,\n",
       "   0.9780476,\n",
       "   0.98504764,\n",
       "   0.9849524,\n",
       "   0.9861429,\n",
       "   0.98583335,\n",
       "   0.9855476,\n",
       "   0.9851429,\n",
       "   0.9868571,\n",
       "   0.98669046,\n",
       "   0.9868571,\n",
       "   0.9864048,\n",
       "   0.9828333,\n",
       "   0.98642856,\n",
       "   0.9907143,\n",
       "   0.99016666,\n",
       "   0.98914284,\n",
       "   0.989881,\n",
       "   0.9881667,\n",
       "   0.9839048,\n",
       "   0.9896905,\n",
       "   0.9935714,\n",
       "   0.99409527,\n",
       "   0.99471426,\n",
       "   0.99438095,\n",
       "   0.99404764,\n",
       "   0.98945236,\n",
       "   0.99038094,\n",
       "   0.99009526,\n",
       "   0.9930952,\n",
       "   0.9942857,\n",
       "   0.9954048,\n",
       "   0.9946667,\n",
       "   0.99285716,\n",
       "   0.99326193,\n",
       "   0.99180955,\n",
       "   0.98985714,\n",
       "   0.9952857,\n",
       "   0.9952143,\n",
       "   0.99588096,\n",
       "   0.9947381,\n",
       "   0.9966428,\n",
       "   0.99483335,\n",
       "   0.99414283,\n",
       "   0.994,\n",
       "   0.9945238,\n",
       "   0.9941667,\n",
       "   0.9952143,\n",
       "   0.9955952,\n",
       "   0.9937619,\n",
       "   0.996119,\n",
       "   0.99654764,\n",
       "   0.9973095,\n",
       "   0.99569046,\n",
       "   0.99180955,\n",
       "   0.995,\n",
       "   0.9897381,\n",
       "   0.9953333,\n",
       "   0.99707144,\n",
       "   0.99707144,\n",
       "   0.9952857,\n",
       "   0.9978333,\n",
       "   0.9982381,\n",
       "   0.999,\n",
       "   0.9992143,\n",
       "   0.997,\n",
       "   0.9954524,\n",
       "   0.99233335,\n",
       "   0.99633336,\n",
       "   0.9978095,\n",
       "   0.9995238,\n",
       "   0.99945235,\n",
       "   0.9998095,\n",
       "   1.0],\n",
       "  'val_loss': [2.5550350329081217,\n",
       "   1.848333044052124,\n",
       "   1.5277204473283557,\n",
       "   1.335028252283732,\n",
       "   1.1849999284744264,\n",
       "   1.0770315527386136,\n",
       "   0.9590966720051236,\n",
       "   0.8902819890975953,\n",
       "   0.8444176451894972,\n",
       "   0.7749950847625733,\n",
       "   0.7065971586969164,\n",
       "   0.6659309301376343,\n",
       "   0.6166246679094103,\n",
       "   0.575389289855957,\n",
       "   0.5441698245207469,\n",
       "   0.5073356385760837,\n",
       "   0.4947413074175517,\n",
       "   0.4684777021408081,\n",
       "   0.43856879862149556,\n",
       "   0.4113009730974833,\n",
       "   0.3864314728313022,\n",
       "   0.38771857039133706,\n",
       "   0.3645104116068946,\n",
       "   0.3729572956826952,\n",
       "   0.339001906130049,\n",
       "   0.33093353859583535,\n",
       "   0.33070707178115843,\n",
       "   0.3010242689450582,\n",
       "   0.28992897763517167,\n",
       "   0.282441647556093,\n",
       "   0.29951422527101307,\n",
       "   0.27684940028190613,\n",
       "   0.28847636217541167,\n",
       "   0.2737970626089308,\n",
       "   0.2935327137576209,\n",
       "   0.27388374349806044,\n",
       "   0.27060531335406834,\n",
       "   0.2825252379576365,\n",
       "   0.262752769364251,\n",
       "   0.26609688727060954,\n",
       "   0.27488044611612955,\n",
       "   0.2419667499065399,\n",
       "   0.23883052417967054,\n",
       "   0.2419132892953025,\n",
       "   0.2553301582866245,\n",
       "   0.2700922213925256,\n",
       "   0.2432237970299191,\n",
       "   0.23191849059528774,\n",
       "   0.22937412725554573,\n",
       "   0.23037877966297998,\n",
       "   0.24873419370916156,\n",
       "   0.29884544977876876,\n",
       "   0.26808659948243035,\n",
       "   0.24167899611261157,\n",
       "   0.2586525937716166,\n",
       "   0.24060434254010518,\n",
       "   0.24796015690432655,\n",
       "   0.245042722357644,\n",
       "   0.25207979143328135,\n",
       "   0.2494711676703559,\n",
       "   0.2815947055949105,\n",
       "   0.27642823229895697,\n",
       "   0.2350696889559428,\n",
       "   0.2370052462418874,\n",
       "   0.27215548164976966,\n",
       "   0.27908737299177383,\n",
       "   0.25975761222839355,\n",
       "   0.23552851915359496,\n",
       "   0.26992430851194593,\n",
       "   0.2845121905141407,\n",
       "   0.27859870590103997,\n",
       "   0.2691485491726134,\n",
       "   0.24634988594055177,\n",
       "   0.28871188516087004,\n",
       "   0.25569661151038275,\n",
       "   0.2587829857402378,\n",
       "   0.26184649080700345,\n",
       "   0.24215060307085515,\n",
       "   0.2708806484937668,\n",
       "   0.2709555423259735,\n",
       "   0.2590695511500041,\n",
       "   0.29749716350022287,\n",
       "   0.26316202804777356,\n",
       "   0.25288483124309113,\n",
       "   0.24018141576978896,\n",
       "   0.25093011907074186,\n",
       "   0.25670353315936195,\n",
       "   0.2507028381029765,\n",
       "   0.24558486635155147,\n",
       "   0.24760747722122403,\n",
       "   0.2615003535747528,\n",
       "   0.25262823824087777,\n",
       "   0.3239554446538289,\n",
       "   0.2517544903225369,\n",
       "   0.2471425583627489,\n",
       "   0.24860575766033596,\n",
       "   0.2411686327457428,\n",
       "   0.23870241713523865,\n",
       "   0.2263454075016909,\n",
       "   0.21921693157611621],\n",
       "  'val_accuracy': [0.815,\n",
       "   0.8566667,\n",
       "   0.8763889,\n",
       "   0.8923889,\n",
       "   0.8999444,\n",
       "   0.90544444,\n",
       "   0.9139444,\n",
       "   0.91605556,\n",
       "   0.9131111,\n",
       "   0.922,\n",
       "   0.9278333,\n",
       "   0.92866665,\n",
       "   0.9315,\n",
       "   0.9330556,\n",
       "   0.93405557,\n",
       "   0.9362778,\n",
       "   0.93405557,\n",
       "   0.937,\n",
       "   0.93927777,\n",
       "   0.94133335,\n",
       "   0.94344443,\n",
       "   0.9411111,\n",
       "   0.94372225,\n",
       "   0.93583333,\n",
       "   0.94622225,\n",
       "   0.9467222,\n",
       "   0.94516665,\n",
       "   0.9505,\n",
       "   0.9498889,\n",
       "   0.9527778,\n",
       "   0.9485555,\n",
       "   0.9521667,\n",
       "   0.9491111,\n",
       "   0.95266664,\n",
       "   0.95077777,\n",
       "   0.9553889,\n",
       "   0.9507222,\n",
       "   0.95188886,\n",
       "   0.95611113,\n",
       "   0.95655555,\n",
       "   0.9532222,\n",
       "   0.95838886,\n",
       "   0.9587778,\n",
       "   0.95816666,\n",
       "   0.95427775,\n",
       "   0.9556111,\n",
       "   0.95916665,\n",
       "   0.9599444,\n",
       "   0.9609445,\n",
       "   0.96044445,\n",
       "   0.9571111,\n",
       "   0.95177776,\n",
       "   0.9557222,\n",
       "   0.95816666,\n",
       "   0.9582222,\n",
       "   0.96088886,\n",
       "   0.95794445,\n",
       "   0.9588889,\n",
       "   0.9597778,\n",
       "   0.95805556,\n",
       "   0.95677775,\n",
       "   0.95622224,\n",
       "   0.96194446,\n",
       "   0.96216667,\n",
       "   0.9573889,\n",
       "   0.9553889,\n",
       "   0.9617222,\n",
       "   0.96216667,\n",
       "   0.9582222,\n",
       "   0.95794445,\n",
       "   0.95905554,\n",
       "   0.95944446,\n",
       "   0.96194446,\n",
       "   0.9588889,\n",
       "   0.96261114,\n",
       "   0.9599444,\n",
       "   0.96122223,\n",
       "   0.9651667,\n",
       "   0.96122223,\n",
       "   0.9586667,\n",
       "   0.9627778,\n",
       "   0.9566111,\n",
       "   0.961,\n",
       "   0.96416664,\n",
       "   0.96577775,\n",
       "   0.9648333,\n",
       "   0.96338886,\n",
       "   0.96455556,\n",
       "   0.9661111,\n",
       "   0.9660556,\n",
       "   0.9634445,\n",
       "   0.9632222,\n",
       "   0.9557222,\n",
       "   0.96155554,\n",
       "   0.9635,\n",
       "   0.9650556,\n",
       "   0.96555555,\n",
       "   0.96727777,\n",
       "   0.967,\n",
       "   0.96705556]}}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history.__dict__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 0s 20us/sample - loss: 0.2020 - accuracy: 0.9705\n"
     ]
    }
   ],
   "source": [
    "results = model.evaluate(x_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "input_x = tf.keras.Input(shape=(784,))\n",
    "hidden1 = layers.Dense(64, activation='relu', kernel_initializer='he_normal')(input_x)\n",
    "hidden2 = layers.Dense(64, activation='relu', kernel_initializer='he_normal')(hidden1)\n",
    "hidden3 = layers.Dense(64, activation='relu', kernel_initializer='he_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01))(hidden2)\n",
    "output = layers.Dense(10, activation='softmax')(hidden3)\n",
    "\n",
    "model = tf.keras.Model(inputs = input_x,outputs = output)\n",
    "model.compile(optimizer=tf.keras.optimizers.Adam(0.001),\n",
    "              loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n",
    "              metrics=['accuracy'])\n",
    "history = model.fit(x_train, y_train, batch_size=256, epochs=100, validation_split=0.3, verbose=0)\n",
    "import matplotlib.pyplot as plt\n",
    "plt.plot(history.history['accuracy'])\n",
    "plt.plot(history.history['val_accuracy'])\n",
    "plt.legend(['training', 'validation'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 模型保存\n",
    "model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "tf2",
   "language": "python",
   "name": "tf2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
